osm: Tweak some warnings on 64-bit linux.
authoroliskoli <oliskoli>
Wed, 2 Apr 2008 18:15:44 +0000 (18:15 +0000)
committeroliskoli <oliskoli>
Wed, 2 Apr 2008 18:15:44 +0000 (18:15 +0000)
osm.c

diff --git a/osm.c b/osm.c
index cc717b5a3e58de2871566645773974d86a9bb9fb..2196f206352bb07c4b9e2690ba1b02a1de4a2eec 100644 (file)
--- a/osm.c
+++ b/osm.c
@@ -408,21 +408,29 @@ static osm_icon_mapping_t osm_icon_mappings[] = {
 static void
 osm_features_init(void)
 {
-       int i;
+       /* here we take a union because of warnings
+          "cast to pointer from integer of different size" 
+          on 64-bit systems */
+       union {
+               const void *p;
+               int i;
+       } x;
 
        keys = avltree_init(0, MYNAME);
        values = avltree_init(0, MYNAME);
        
+       x.p = NULL;
+       
        /* the first of osm_features is a place holder */
-       for (i = 1; osm_features[i]; i++)
-               avltree_insert(keys, osm_features[i], (void *)i);
+       for (x.i = 1; osm_features[x.i]; x.i++)
+               avltree_insert(keys, osm_features[x.i], x.p);
        
-       for (i = 0; osm_icon_mappings[i].value; i++) {
+       for (x.i = 0; osm_icon_mappings[x.i].value; x.i++) {
                char buff[128];
 
-               buff[0] = osm_icon_mappings[i].key;
-               strncpy(&buff[1], osm_icon_mappings[i].value, sizeof(buff) - 1);
-               avltree_insert(values, buff, (void *)&osm_icon_mappings[i]);
+               buff[0] = osm_icon_mappings[x.i].key;
+               strncpy(&buff[1], osm_icon_mappings[x.i].value, sizeof(buff) - 1);
+               avltree_insert(values, buff, (const void *)&osm_icon_mappings[x.i]);
        }
 }
 
@@ -431,10 +439,13 @@ static char
 osm_feature_ikey(const char *key)
 {
        int result;
-       const void *data;
+       union {
+               const void *p;
+               int i;
+       } x;
        
-       if (avltree_find(keys, key, &data))
-               result = (int)data;
+       if (avltree_find(keys, key, &x.p))
+               result = x.i;
        else
                result = -1;
 
@@ -447,13 +458,13 @@ osm_feature_symbol(const char ikey, const char *value)
 {
        char *result;
        char buff[128];
-       const void *data;
+       osm_icon_mapping_t *data;
 
        buff[0] = ikey;
        strncpy(&buff[1], value, sizeof(buff) - 1);
 
-       if (avltree_find(values, buff, &data))
-               result = xstrdup(((osm_icon_mapping_t *)data)->icon);
+       if (avltree_find(values, buff, (void *)&data))
+               result = xstrdup(data->icon);
        else
                xasprintf(&result, "%s:%s", osm_features[(int)ikey], value);